昨天你已經學會了怎麼使用 print、puts、p 來印出 Hello world 了,但這僅僅只是礦坑給你的小小見面禮。
今天要介紹在礦坑中常用的工具-變數,這也是我成為菜鳥礦工第一課!
變數是什麼?是會變身的數字?
還是一下子是10過一陣子又變成1的數字?
其實變數就只是一個標籤罷了,我們可以藉由變數來快速地取得我們所需要的東西。
舉個例子:
搬家時,有許多的東西需要分門別列的放進收箱中,並且在箱子外面貼上一個標籤,標示裡面的東西;下次拿東西時,可以藉由標籤快速取得我們需要的東西。
box = "Play Station 5"
puts box # 印出 Play Station 5
而變數本身沒有型態,型態就像是字串、數字、布林值......等。
在Ruby中,有四種變數,分別為以下四種:
區域變數 | 全域變數 | 實體變數 | 類別變數 | |
---|---|---|---|---|
命名方式 | username | $username | @username | @@username |
顧名思義就是生活於一個區域中的變數,而且開頭不用加任何東西。
例如:
name = "Tom"
def method_a
name = "John"
puts "Method_a: My name is #{name}."
end
def method_b
name = 'Andy'
puts "Method_b: My name is #{name}."
end
method_a
method_b
puts "Outside: My name is #{name}."
如果你現在看不懂def
跟end
沒關係,之後的章節會在講到這個,這邊你可以先把這兩個當作一個區域。
根據上面的說明,當呼叫了method_a
和method_b
方法以及印出一段文字。
那麼會印出什麼東西呢?
Method_a: My name is John.
Method_b: My name is Andy.
Outside: My name is Tom.
會出現這樣的結果,是因為區域變數的關係,當每個name變數離開了method_a
及method_b
,他就會消失了,而外面的name,因為沒有東西包住他,所以他會被下面的puts
印出來。
對全域變數來說,所有的地方都可以使用他,但是沒事不要隨便使用全域變數,這樣可能會造成接手你程式的人甚至你自己的困擾,尤其是Debug
時。
$count = 0
class Test
def count_1
$count += 1
puts "count_1: #{$count}"
end
end
class Test2
def count_2
$count += 2
puts "count_2: #{$count}"
end
end
puts "count_0: #{$count}"
test = Test.new
test.count_1
test2 = Test2.new
test2.count_2
執行後的結果為:
count_0: 0
count_1: 1
count_2: 3
因為全域變數的關係,當執行class Test
時,$count
會 +1 並印出count_1: 1
;此時的$count
會變成$count = 1
。
所以當執行class Test2
後,會變成1 + 2
,所以會印出count_2: 3
。
全域變數竟然影響到其他的地方!除非這是你要的效果,不然不要隨便使用。
如果你有寫過其他的程式語言,你會發現好像少了些什麼。
在Ruby的世界中,使用變數是不用是先宣告或是指定型態,直接用就可以了。
是不是覺得他很方便啊!
在變數命名規則上,一般來說組成會使用英文字母、數字或底線。或是非英文字母也可以,例如:
book_title = "菜鳥礦工的生存日記"
power = 100
工具 = "十字鎬"
實體變數與區域變數,在後面的章節會提到,所以請大家不要緊張,我們明天見!
參考資料: